﻿#include<iostream>
enum class WeaponLv {
	normal = 0,
	high,
	rare,
	myth
};

class Role {//外层类

	static void test() {

	}

public:
	int hp;
	int mp;
	Role() {
		Weapon::test1();
	}
	class Weapon;//声明，不用将Weapon类写入Role类中，防止Role类太臃肿
	class Weapon {//嵌套类
		Weapon* ReturnW();//声明函数
	public:
		Weapon();//声明函数
		Weapon() {
			hp++;//报错，只能用静态成员
			test();
		}
		short lv;
		WeaponLv wlv;
		static void test1() {//要放在公共才能让外层类访问

		}
	};
	Weapon leftHands;//嵌套类需要写在外层类里才能声明成功
};

class Role::Weapon {//嵌套类
	Weapon* ReturnW();//声明函数
public:
	Weapon();//声明函数
	short lv;
	WeaponLv wlv;
};

Role::Weapon::Weapon() {//定义函数
	test();//嵌套类函数能调用外层类的静态函数，放在私有也是可以的
	std::cout << "weapon!" << std::endl;
}
Role::Weapon* Role::Weapon::ReturnW() {//定义函数，类指针需要加上外层类
	return this;
}
int a1;
int main() {
	Role::Weapon wpl;
	int x = 250;
	class T2 {//局部类，函数定义与对象生成不能放在外面
		static int a;//报错，不能使用静态变量
		int hp;
		int mp;
		void GetHp() {
			a1++;//能访问全局变量
			x++;//有些编译器可以使用，有些不能
		}
		static int GetCount() {}//有些编译器可以使用，有些不能
	};
	T2 t1;
}